package com.cxy.web.swing;

import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;
import javax.swing.Timer;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

import org.springframework.context.ApplicationContext;

import com.cxy.common.MyMathRandom;
import com.cxy.entity.SysAward;
import com.cxy.entity.SysUser;
import com.cxy.service.AwardService;
import com.cxy.service.UserService;
import com.cxy.util.SpringContextUtils;

/**
 * 抽奖视图
 * @author 岑锦涛
 *
 */
public class LuckDrawView extends JFrame {

	private static final long serialVersionUID = 7113538623331703425L;

	static ApplicationContext ctx = SpringContextUtils.getApplicationContext(); // 获取Spring上下文对象
	private static UserService userService = (UserService) ctx
			.getBean("userService");
	private static AwardService awardService = (AwardService) ctx
			.getBean("awardService");

	// 创建窗体JFrame对象、放置验证码的JLabel对象、控制开始停止的JButton对象
	final JFrame jf = new JFrame("抽奖");
	final JLabel jl = new JLabel("点击开始");
	final JButton jb = new JButton("开始");
	// 创建可以间隔定时执行的Timer对象，间隔为200毫秒，初始ActionListener为null
	final Timer times = new Timer(200, null);
	// 获取JFrame内容面板
	Container con = jf.getContentPane();
	
	private int x = 0;
	private int y = 0;
	private static SysUser luckyUser = null;
	private static String result = "";

	public LuckDrawView(SysUser user) {
		luckyUser = user;
		x = luckyUser.getLotteryNum(); // 抽奖次数


		// 设置内容面板布局为null
		con.setLayout(null);

		// 把标签对象添加进内容面板
		con.add(jl);
		// 设置标签文字格式
		jl.setFont(new Font("幼圆", Font.PLAIN, 30));
		// 设置标签的摆放位置和大小
		jl.setBounds(70, 30, 126, 36);

		// 把按钮添加进内容面板
		con.add(jb);
		// 设置按钮的摆放位置和大小
		jb.setBounds(90, 90, 90, 30);
		// 为按钮注册ActionListener事件
		jb.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// 判断中奖信息是否在滚动，是 则停止，否 则开始滚动
				if (x > 0) {
					if (!times.isRunning()) {
						times.start();
					} else {
						times.stop();
					}

					// 改变按钮的文字，开始滚动后变为停止，停止后变为开始
					if ("开始".equals(jb.getText())) {
						jb.setText("停止");
					} else {
						x-=1;
						jb.setText("开始");

						// 开启一个线程
						new Thread(new Runnable() {
							public void run() {
								updateMsg(luckyUser, result); // 更新抽奖信息，新增数据的方法改为 merge()																
							}
						}).start();

					}
				} else {
					JOptionPane.showMessageDialog(jl, "抽奖次数已用完", "温馨提示",
							JOptionPane.WARNING_MESSAGE);
				}
				// 为Timer对象添加ActionListener事件，在事件中产生随机验证码并实现验证码的滚动操作
				times.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent e) {

						int num = 0;
						for (int i = 0; i < 6; i++) {
							num = MyMathRandom.PercentageRandom();
						}
						result = getDrawResult(num);
						try {
							Thread.sleep(1);
						} catch (InterruptedException e1) {
							e1.printStackTrace();
						}
						jl.setText(result);
					}
				});
			}
		});

		// 设置JFrame大小
		jf.setSize(260, 200);
		// 窗体置顶显示
		jf.setAlwaysOnTop(true);
		// JFrame不能改变大小
		jf.setResizable(false);
		// JFrame居中显示
		jf.setLocationRelativeTo(null);
		// 显示JFrame窗体
		jf.setVisible(true);
		// 设置JFrame关闭动作
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public void updateMsg(SysUser luckyUser, String result) {
		y = luckyUser.getLotteryNum();
 
		if (y > 0) {
			luckyUser.setLotteryNum(y - 1);// 点击一次抽奖次数减1，保存抽奖信息
			SysAward award = null;
			if (!"".equals(result) && null != result) {
				award = awardService.findByLevel(result);
			}
			if (null != award) {
				int awardNum = award.getAwardNum();
				award.setAwardNum(awardNum - 1);
				awardService.update(award); // 更新奖品数据表
				luckyUser.setAward(award);
			}
			userService.add(luckyUser);// 更新用户抽奖次数
		}
	}

	public static String getDrawResult(int num) {
		String str = "";
		switch (num) {
		case 0:
			str = "继续努力";
			break;
		case 1:
			str = "三等奖";
			break;
		case 2:
			str = "二等奖";
			break;
		case 3:
			str = "一等奖";
			break;
		}
		return str;
	}
}
